"""
Author : sunshicheng
DateTime : 2021/1/13.10:57 上午
FileName : logger.py
Desc: 定义日志相关内容


"""

import os
import time
import logging
import logging.handlers


class Log(object):
    """
    logging的初始化操作，以类封装的形式进行
    """

    def __init__(self):
        # 定义对应的程序模块名name，默认为root
        self.logger = logging.getLogger()

        # 设置输出的等级
        level_relations = {'noset': logging.NOTSET,
                           'debug': logging.DEBUG,
                           'info': logging.INFO,
                           'waring': logging.WARNING,
                           'error': logging.ERROR,
                           'critical': logging.CRITICAL}

        # log_path是存放日志的路径
        times_str = time.strftime('%Y-%m-%d', time.localtime(time.time()))
        lib_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '../logs'))
        # 如果不存在这个logs文件夹，就自动创建一个
        if not os.path.exists(lib_path):
            os.mkdir(lib_path)
        # 日志文件的地址
        self.log_name = lib_path + '/' + times_str + '.log'

        # 必须设置，这里如果不显示设置，默认过滤掉warning之前的所有级别的信息
        self.logger.setLevel(level_relations.get('info'))

        # 日志输出格式
        self.formatter = logging.Formatter('[%(asctime)s] [%(filename)s] [%(funcName)s] [%(levelname)s] : %(message)s')
        if not self.logger.handlers:
            # 创建一个FileHandler， 向文件logname输出日志信息
            file_handle = logging.handlers.RotatingFileHandler(filename=self.log_name,
                                                               maxBytes=1024 * 1024 * 50,
                                                               backupCount=5)
            # 设置日志等级
            file_handle.setLevel(logging.INFO)
            # 设置handler的格式对象
            file_handle.setFormatter(self.formatter)
            # 将handler增加到logger中
            self.logger.addHandler(file_handle)

            # 创建一个StreamHandler,用于输出到控制台
            console_handle = logging.StreamHandler()
            console_handle.setLevel(logging.INFO)
            console_handle.setFormatter(self.formatter)
            self.logger.addHandler(console_handle)

            # 关闭打开的文件
            file_handle.close()


if __name__ == '__main__':
    logger = Log()
    logger.logger.info('ssc')
